package org.example.flea_market_mvc.param;

import java.math.BigDecimal;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import lombok.Data;

/**
 * 订单参数类
 * 用于接收前端传入的订单相关请求参数
 */
@Data
public class OrderParam {
    @NotNull(message = "订单编号不能为空")
    @Size(max = 50, message = "订单编号长度不能超过50")
    private String orderNumber;    // 订单编号（唯一标识）
    @NotNull(message = "买家用户ID不能为空")
    private Integer buyerId;       // 买家用户ID
    @NotNull(message = "卖家用户ID不能为空")
    private Integer sellerId;      // 卖家用户ID
    @NotNull(message = "商品ID不能为空")
    private Integer productId;     // 商品ID
    @NotNull(message = "商品数量不能为空")
    @Min(value = 1, message = "商品数量不能小于1")
    private Integer quantity;      // 商品数量
    @NotNull(message = "订单价格不能为空")
    @Min(value = 0, message = "订单价格不能为负数")
    private BigDecimal price;      // 订单价格
    @NotNull(message = "运费不能为空")
    @Min(value = 0, message = "运费不能为负数")
    private BigDecimal shippingFee;  // 运费
    @NotNull(message = "优惠金额不能为空")
    @Min(value = 0, message = "优惠金额不能为负数")
    private BigDecimal discountAmount;  // 优惠金额
    @NotNull(message = "订单状态不能为空")
    // 这里假设OrderStatusEnum有合理的范围，根据实际情况修改
    @Min(value = 1, message = "订单状态值无效")
    @Max(value = 5, message = "订单状态值无效")
    private Integer status;        // 订单状态（使用OrderStatusEnum枚举值）
    @NotNull(message = "支付方式不能为空")
    // 这里假设PaymentMethodEnum有合理的范围，根据实际情况修改
    @Min(value = 1, message = "支付方式值无效")
    @Max(value = 5, message = "支付方式值无效")
    private Integer paymentMethod; // 支付方式（使用PaymentMethodEnum枚举值）
    @Size(max = 500, message = "买家留言长度不能超过500")
    private String buyerMessage;   // 买家留言
    @Size(max = 500, message = "卖家备注长度不能超过500")
    private String sellerRemark;   // 卖家备注
    @NotNull(message = "收货地址ID不能为空")
    private Integer addressId;     // 收货地址ID
    @Size(max = 50, message = "物流单号长度不能超过50")
    private String logisticsNumber; // 物流单号
    @Size(max = 100, message = "物流公司长度不能超过100")
    private String logisticsCompany; // 物流公司
}